View在很多資料庫系統中, 是相當有應用彈的物件, 基本上, 我們常利用View來:
mysql> CREATE INDEX v_Sales_Order_In_Process
AS
SELECT SH.SalesID, SH.CustomerName, SH.DueDate, SH.ShipDate,
SH.Status, SD.ItemID, SD.ItemName, SD.Unit, SD.Quantity,
SD.Price, SD.Amount
FROM Sales_Order_Header SH, Sales_Order_Detail SD
WHERE SH.SalesID = SD.SalesID
AND SH.Status NOT IN ("R", "X", "C");
CREATE INDEX v_Sales_Order_In_Process <==請問這是不是打錯了? Create VIEW?還是INDEX?
小弟是外行人,想請教啥時候,比較適合使用VIEW,能否舉幾個實例?
目前小弟的理解是:如果今天公司內部程式,每個使用者都會用到報單資料查詢列表,而這些資料列表預設都是列出今日的資料,現今有10位使用者同時使用報單查詢列表,這時候程式內使用CREATE VIEW會比直接使用SELECT查詢資料庫效能好?不知道觀念是否正確,還望大大提點一二,謝謝。
另外想請問,當我們建立了CREATE VIEW,如果不使用了,它會佔用記憶體嗎?需要手動消毀嗎?還是程式會自動FREE它?
感謝指正, 已訂正, 謝謝!
一般來說, 用View的時機有兩個, 一個就是您說的在做報表的時候, 另一個是因為前端應用程式需要 一個就是您說的在做報表的時候, 另一個是因為前端應用程式需要與現在Table內容排列不同的結構, 就用View來建一個需要的結構出來..
基本上View是資料庫中的定義, 不會佔用記憶體, 但佔用硬碟一點空間存放其定義及己解析過的語法...這樣如有前端應用叫用讓View, 就會載入Cache(記憶體)開始運作, 運作完畢後, 過一段時間, 資料庫引擎判斷不會再用到, 就會把佔用的Cache空間釋放出來作其他用途..
感謝您的回覆,讓小弟對VIEW的應用有了進一步的認識。對詳細運做流程還是有點疑慮,就是如果今天第一個使用者開啟程式,程式第一次建立了VIEW,然後第二個使用者再開程式,資料庫就會直接存取在記憶體中的VIEW,而不會再做重建的動作,也就自然的少了再次直接查詢資料庫的查詢動作,而讓系統負載較低是嗎?
再請問,您知道系統釋放記憶體的時間是依據那裡的設定?還有預設大概是多久?
小弟剛試了一下,如果程式一開始建立了VIEW,第二次執行程式,sql會出錯(資料庫中已經有一個名為 'V_REGION_SALES' 的物件。)
請問sql或是程式中有辦法判定這個VIEW已經存在而不再去CREATE一次嗎?
另外測試過了,建立後的VIEW TABLE資料,會隨著主TABLE資料的新增,VIEW TABLE也會自動跟著新增!
弟查了GOOGLE,使用下面語法判定有無值:
SELECT OBJECT_ID('V_REGION_SALES')
若有值代表已經建立了VIEW TABLE,若NULL則需要做建立VIEW TABLE的動作。